package demo01Object;


public class demo03 implements Cloneable {
    private String name;
    private Object[] elements;

    public demo03() {
    }

    public demo03(String name) {
        this.name = name;
    }
    //实体类使用克隆(使用clone()方法)的前提是：
    //① 实现Cloneable接口，这是一个标记接口，自身没有方法。
    //② 覆盖clone()方法，可见性提升为public
    public void way01() {
        demo03 d1 = new demo03("张三");
        System.out.println(d1);
        try {
            demo03 d2 = (demo03) d1.clone();
            System.out.println(d2);
        } catch (CloneNotSupportedException e) {
            System.out.println(e);
        }
    }

    // 浅拷贝
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

    //深拷贝
//    @Override
//    protected demo03 clone() throws CloneNotSupportedException {
//        demo03 result = (demo03) super.clone();
//        result.elements = elements.clone(); //对elements元素进行拷贝（引用或基本数据类型）
//        return result;
//    }
}
